質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

2回答

10663閲覧

ファイルAPIでファイルを移動させたい

agepan

総合スコア66

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2017/10/19 05:11

編集2017/10/21 00:58

MonacaでファイルAPI(ファイル操作プラグイン)を用いてファイルを移動させるコードを書いています。

こちらのサイトを参考に、フォルダAにある「abc.jpg」をフォルダBに移動させるコードを書きたいのですが、以下コードではエラーとなってしまい、ファイルの移動ができません。

問題点・改善点をご教授いただけますと幸いです。
よろしくお願いいたします。

JavaScript

1 2var fileName = 'abc.jpg'; 3var folderA = 'A'; 4var folderB = 'B'; 5 6window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onFileSystemFail); 7function onFileSystemSuccess(fileSystem) { 8 var directoryEntry = fileSystem.root; 9 //var directoryReader = directoryEntry.createReader(); 10 //directoryReader.readEntries(getFileName, fail); 11 12 //サブディレクトリのファイルを取得・移動 13 directoryEntry.getDirectory(folderA, { create: false }, function(subDirectoryEntry) { 14 subDirectoryEntry.move('/' + fileName, folderB + '/'); 15 }); 16 17} 18function onFileSystemFail(error) { 19 console.log("error: " + error.code); 20}

追記:
参照元サイトで「FileEntry」を使用していることから、もしかすると下記のようなコードが参考になるかも知れません。

JavaScript

1 var filename = 'abc.jpg'; 2 var folderurl = cordova.file.documentsDirectory + 'folderA' + '/'; 3 4 window.resolveLocalFileSystemURL( folderurl , 5 function getDirectoryEntry( directoryEntry ) { 6 directoryEntry.getFile( filename, null, 7 function readFile( fileEntry ) { 8 fileEntry.file( 9 function( file ) { 10 var reader = new FileReader(); 11 reader.onloadend = function() { 12 }; 13 reader.readAsText(file); 14 }, 15 function fail(e) { 16 // エラー処理 17 } 18 ); 19 }, 20 function fail(e) { 21 // エラー処理 22 } 23 ); 24 }, 25 function fail(e) { 26 // エラー処理 27 } 28 );

再追記:
エラーメッセージです。

Error in Success callbackId: File1535706521 : TypeError: directoryReader.move is not a function. (In 'directoryReader.move(fileName, '/' + folderB + '/')', 'directoryReader.move' is undefined)

TypeError: directoryReader.move is not a function. (In 'directoryReader.move(fileName, '/' + folderB + '/')', 'directoryReader.move' is undefined)


再追記(2017.10.21)

参考元のサイトのコードに即して書き直してみました。すると、

Error in Success callbackid:File870964021:
ReferenceError:Can't find variable:fs

とエラーになります。fsはおそらくFileSystemのことではないかと思うのですが、参考元サイトのコードそのままの部分なので、どのようにエラー対処していいものか見当が付きません。ちなみにfsをfileSystemに書き換えても同様のエラーになります。よろしくお願いいたします。

JavaScript

1window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) { 2 move('/' + folderA + '/' + 'abc.jpg', folderB + '/'); 3}, errorHandler); 4 5function move(src, dirName) { 6 fs.root.getFile(src, {}, function(fileEntry) { 7 8 fs.root.getDirectory(dirName, {}, function(dirEntry) { 9 fileEntry.moveTo(dirEntry); 10 }, errorHandler); 11 12 }, errorHandler); 13} 14 15 16function errorHandler(e) { 17 console.log('Error: ' + msg); 18}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rnosh

2017/10/20 04:55

エラーの内容が知りたいのですが、追記いただけますか?
agepan

2017/10/20 05:00

エラーメッセージの方、追記させていただきました。よろしくお願いいたします。
guest

回答2

0

自己解決

自己解決いたしました。一番最後に試した、参考元サイトにあったコードを使い、一部修正を入れることで動作するにようになりました。

JavaScript

1var folderA = 'フォルダーA'; 2var folderB = 'フォルダーB'; 3var fileName = 'abc.jpg'; 4 5window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) { 6 move('/' + folderA + '/' + fileName, folderB + '/', fs); // 引数に「fs」追加 7}, errorHandler); 8 9function move(src, dirName, fs) { // 引数に「fs」追加 10 fs.root.getFile(src, {}, function(fileEntry) { 11 12 fs.root.getDirectory(dirName, {}, function(dirEntry) { 13 fileEntry.moveTo(dirEntry); 14 }, errorHandler); 15 16 }, errorHandler); 17} 18 19 20function errorHandler(e) { 21 console.log('Error: ' + msg); 22} 23

エラーメッセージで「fs」と出ていたので、参考元サイトのコードには入っていない、moveの引数として「fs」を追加したところ正しく動作するようになりました。

投稿2017/10/21 01:48

agepan

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージの追記ありがとうございます。

まずエラーを見る限りなんですが、ちゃんと想定している箇所を通っていますか?

TypeError: directoryReader.move is not a function

'directoryReader.move' is undefined

この2つのメッセージはざっくり言うと、
・'directoryReader.move'はファンクション(関数、メソッド化されていない)ではない。
・'directoryReader.move'は未定義
と言っています。

directoryReader.moveという記述がご記載のソース内には見当たらないので、
エラーが発生しているのは、この投稿に記載されているソース以外の場所で起こっているように思えます。

もしdirectoryReader.moveというファンクションが存在するのであれば、その箇所のソースがエラーの解決には必要になると思います。
もし存在しないのであれば、呼び出し元に問題があるかと思われます。

投稿2017/10/20 09:49

rnosh

総合スコア171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

agepan

2017/10/20 10:06

ご回答ありがとうございます。 ファイルAPIについては理解がまだ追いついていない状態でして、手探りでやっている状態であります。先に投稿しましたコードをさらに弄ってまして、今は下記のようなコードになっていますが解決しておりません。先ほどの「directoryReader.move」のエラーはこのコードで生み出された物だと思います。 ```JavaScript window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onFileSystemFail); function onFileSystemSuccess(fileSystem) { var directoryEntry = fileSystem.root; var directoryReader = directoryEntry.createReader(); //サブディレクトリのファイルを取得する ここから directoryEntry.getDirectory(folderA, { create: false }, function(subDirectoryEntry) { directoryReader.move('/' + folderA + '/' + fileName, folderB + '/'); }); } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問