9

R では、write.table()長い名前のディレクトリに埋め込まれた場所にファイルを書き込むために使用していました。しかし、次のようにエラーになります。

ファイル内のエラー(file, ifelse(append, "a", "w")) : 接続を開けません さらに: 警告メッセージ: ファイル内(ファイル, ifelse(append, "a", "w")) : 接続できませんファイル「data/production/Weekly_Prod_201407_Selling_Price_Snapshot_20140930_Median_Selling_Price_Map.csv」を開く: そのようなファイルまたはディレクトリはありません

次に、ファイル名を に短縮するとWeekly_Prod.csv、うまくいきました! そのため、長いパスと長いファイル名が原因で R がエラーになったようです。

何度かテストしたところ、パスとファイル名の合計の長さが 260 文字に制限されていることがわかりました。つまり、R は 261 文字以上になるとエラーになります。これを回避する方法はありますか?助けてください。ありがとう!

4

2 に答える 2

10

Windows では、ファイル パスの長さに制限があります。

> write(1, paste0(paste(sample(letters, 150, TRUE), collapse = ''), '.txt'))
> write(1, paste0(paste(sample(letters, 250, TRUE), collapse = ''), '.txt'))
Error in file(file, ifelse(append, "a", "w")) : 
  cannot open the connection
In addition: Warning message:
In file(file, ifelse(append, "a", "w")) :
  cannot open file 'qvxirpnlwkqfwlxhggkscxlwhhyblrwxfpikpsukrfqwhaqvsyhdpihnoknqmxgafvawxkuijqbmvgdjwwgeumfksmhtiqwvzwmjukmmmeesvcdpdbpimarxssnrngfxwjksqshjruralhtwdnfmdhzrcwcdrnwezdhwqyisbjikdhbbygtcoeechgwrewenewbrlexliiikdnwlclbzllaxcohacadxzztgmtnmppyxtxtbopxdokjnvx.txt': No such file or directory

このソースによると、260文字です

http://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

> nchar(getwd())
[1] 23
> write(1, paste0(paste(sample(letters, 231, TRUE), collapse = ''), '.txt'))
> write(1, paste0(paste(sample(letters, 232, TRUE), collapse = ''), '.txt'))
Error in file(file, ifelse(append, "a", "w")) : 
  cannot open the connection
In addition: Warning message:
In file(file, ifelse(append, "a", "w")) :
  cannot open file 'topylmudgfnrkdilqbklylwtbwrgwbwmamxzhwwzlxxslqeuhpywahoxqxpkckvmkfjccbsqncctlovcnxctkyvgunnbqcwyiliwpfkjibanpmtupsxfboxnjaadovtdpxeloqjnbqgvkcilwljfswzlrlqixmwqpoemcemhdizwwwbgqruhepyrskiklkbylzjhrcchbusohkrwyzgablvngqrqiardubcbziex.txt': No such file or directory
> getwd()
[1] "C:/Users/john/Documents"

> nchar(file.path(getwd(), paste0(paste(sample(letters, 231, TRUE), collapse = ''), '.txt')))
[1] 259

有効な解決策の 1 つは、長いディレクトリ パス用の仮想ドライブを作成することです。少し余裕を持たせる必要がありますhttps://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/subst.mspx?mfr=trueを参照

> system("subst x: C:/Users/john/Documents")
> write(1, paste0("x://", paste(sample(letters, 251, TRUE), collapse = ''), '.txt'))

仮想ドライブの操作が完了したら、次を使用して元に戻すことができます。

system("subst x: /D")
于 2014-10-01T22:21:50.280 に答える
1

これは、前述のファイルの名前を短いファイル名 (SFN) (別名8.3 ファイル名)に置き換えることで対処できます。

コマンドプロンプトで、ファイルが配置されているディレクトリに対して dir /xと入力します。これにより、ディレクトリ内のファイルのすべてのSFNが一覧表示されます。

次に、コード内のファイル名を対応する 8.3 ファイル名に置き換えます。

于 2015-05-18T14:56:42.293 に答える